iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

自己的 Leak, 自己抓(swift)系列 第 24

番外: swift demangle

  • 分享至 

  • xImage
  •  

之前提到過 swift demangle

除了使用 swift-demangle cli 以外還有其他方式可以使用


其他使用方式


Swift Secrets

這邊參考 Swift Secrets 的實作方式

/// SWIFT_RUNTIME_EXPORT
/// https://github.com/apple/swift/blob/a4e71aa819cfaa25d512555c351377efa968aa68/include/swift/Demangling/Demangle.h#L668
@_silgen_name("swift_demangle")
private func _stdlib_demangleImpl(_ mangledName: UnsafePointer<Int8>?, mangledNameLength: UInt, outputBuffer: UnsafeMutablePointer<Int8>?, outputBufferSize: UnsafeMutablePointer<UInt>?, flags: UInt32) -> UnsafeMutablePointer<Int8>?

func demangle(_ symbol: String) -> String? {
    return symbol.withCString { (cString: UnsafePointer<Int8>) -> String? in
        let std: UnsafeMutablePointer<Int8>? = _stdlib_demangleImpl(
            cString,
            mangledNameLength: UInt(strlen(cString)),
            outputBuffer: nil,
            outputBufferSize: nil,
            flags: 0
        )
        if let demangled: UnsafeMutablePointer<Int8> = std {
            let out: String = String(cString: demangled)
            free(demangled)
            return out
        }
        return nil
    }
}

使用方式

demangle(usr)

定義

.

SWIFT_RUNTIME_EXPORT
char *swift_demangle(const char *mangledName,
                     size_t mangledNameLength,
                     char *outputBuffer,
                     size_t *outputBufferSize,
                     uint32_t flags)

上一篇
繼續導入 github action
下一篇
實作 Assign Visitor
系列文
自己的 Leak, 自己抓(swift)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言